﻿
#ifndef ___THREADTASK_H__
#define ___THREADTASK_H__

#include <vector>
#include <list>
#include <pthread.h>
#include <atomic>   //c++11里的原子操作
#include "public.h"
//线程池相关类

class CThreadlTask
{
public:
    //构造函数
    CThreadlTask();               
    //析构函数
    ~CThreadlTask();                           
public:
    bool Start(int threadNum);                      
    

	void Stop();                                 

    //增加任务；
    void AddTask(char *buf);        
    
    //唤醒
	void Wakeup();

private:
    static void* TaskFun(void *threadData);      //新线程的线程回调函数
	
    void 		ClearTask();                                //清理接收消息队列
private:

    struct ThreadItem   
    {
        pthread_t           _Handle;      
        CThreadlTask     	*_pThis;                         
        bool                ifrunning;
		
        ThreadItem(CThreadlTask *pthis):_pThis(pthis),ifrunning(false)
		{
			
		} 
        ~ThreadItem()
		{
			
		}        
    };

private:
     pthread_mutex_t             			m_pthreadMutex; 
	
     pthread_cond_t              			m_pthreadCond;  
	
     bool                        			        m_shutdown;          //线程退出标志，false不退出，true退出

    int                                        	    m_iThreadNum;
    
	std::atomic<int>                          m_iRunningThreadNum;
	
    //time_t                                        m_iLastEmgTime;      //上次发生线程不够用【紧急事件】的时间,防止日志报的太频繁
	
    std::vector<ThreadItem *>      	  m_threadVector;      //线程 容器，容器里就是各个线程了
	
public:	
    //接收消息队列相关
    std::list<char *>                           m_MsgRecvQueue;       //接收数据消息队列 
	int                                         m_nTaskNum;			  //收消息队列大小
	
};

#endif
